【SAP ABAP】OLE批量下载文件

您所在的位置:网站首页 ftp 下载文件 【SAP ABAP】OLE批量下载文件

【SAP ABAP】OLE批量下载文件

#【SAP ABAP】OLE批量下载文件| 来源: 网络整理| 查看: 265

@SAP ABAP OLE批量下载文件

目前在做DOI的程序,发现OAOR与SMW0有相似之处。OAOR可以单独获取文件夹地址与目标文件名拼接下载。但是之前OLE下载方式都是针对一个文件的,现在摸索出了批量方式(有限制 这里将先将主要代码粘贴进来。(可先看后面 DATA:lv_index TYPE i. DATA: BEGIN OF ls_data , path TYPE char300, END OF ls_data. DATA:lt_data LIKE TABLE OF ls_data. DATA: wg_downf(128) TYPE c, "下载模板名称 c_temp TYPE wwwdatatab. READ TABLE gt_data INTO gs_data WITH KEY message = '' sel = 'X'. IF sy-subrc 0. MESSAGE '有错误行' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. * 文件路径选择 CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_filename = 'EXPROT' def_path = 'C:\' mask = ',EXCEL文件(*.XLSX),*.xlsx,*.*,' mode = 'S' title = '请选择文件路径' IMPORTING filename = g_path EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc = '3'. "点取消退回 MESSAGE '用户取消保存' TYPE 'S'. RETURN. ENDIF. CHECK NOT g_path IS INITIAL. * 下载EXCEL模板 *使用事物码SMW0上传好模版之后 此参数可以在WWWDATA表中查询到 c_temp-relid = 'MI'. c_temp-objid = cs_objname. // SMW0模板名称 ”循环选中行数据 LOOP AT gt_data INTO gs_data WHERE sel = 'X' AND message = ''. CLEAR:lt_data,lv_index. SPLIT g_path AT '\' INTO TABLE lt_data."将地址按照 \ 进行拆分 lv_index = lines( lt_data )."获取拆分表的行数 "读取最后一行,也就是 文件名.XLS READ TABLE lt_data INTO ls_data INDEX lv_index. IF sy-subrc = 0. "将文件名替换为 自定义名称.XLSX REPLACE ls_data-path IN g_path WITH gs_data-zname && gs_data-zid && '.XLSX' IN CHARACTER MODE. CLEAR:ls_data. ENDIF. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = c_temp destination = g_path. IF sy-subrc 0. MESSAGE '下载模板失败' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. PERFORM expot_excel USING g_path. // OLE填充数据 ENDLOOP.

下面是 FORM expot_excel 的代码

INCLUDE ole2incl. DATA: g_excel TYPE ole2_object, g_wbook TYPE ole2_object, g_sheet TYPE ole2_object, g_range TYPE ole2_object. DATA: g_visible TYPE i VALUE 0. DATA:lv_txtpost TYPE string. DATA:lv_code TYPE char30. lv_code = gs_data-zid && '/' && '15972279761'. PERFORM sub_initialization USING g_excel g_wbook l_file g_sheet g_visible. ."岗位获取 ,项目特有,粘贴时请忽略 PERFORM frm_post_txt USING gs_data-zpostlv CHANGING lv_txtpost PERFORM sub_write_cell USING: g_sheet 1 2 gs_data-zname, g_sheet 1 5 gs_data-zid, g_sheet 2 5 '宇宙CTRL商务局', g_sheet 4 2 '男', g_sheet 4 5 gs_data-zyear, g_sheet 7 2 lv_txtpost, g_sheet 10 2 '123123123123', g_sheet 10 5 '[email protected]', g_sheet 5 7 lv_code. PERFORM sub_save_excel USING g_excel g_wbook l_file g_visible. CLEAR:g_excel,g_wbook,g_sheet,g_range,g_visible,lv_txtpost,lv_code.

下面是 FORM sub_save_excel 的代码

SET PROPERTY OF excel 'DisplayAlerts' = 0. CALL METHOD OF wbook 'SAVEAS' EXPORTING #1 = filename. IF visible EQ 0. CALL METHOD OF wbook 'Close'. CALL METHOD OF excel 'QUIT'. ENDIF. FREE OBJECT wbook. "释放工作簿 FREE OBJECT excel. WAIT UP TO '0.2' SECONDS.

其实最主要的就是在 DOWNLOAD_WEB_OBJECT,这是从SMW0中下载模板到本地。我们获取文件地址时并不能选中文件夹,而是需要给出一个文件名,所以这里默认了一个文件名’EXPORT’,其实文件名是什么都无所谓,最后都会被替换掉。

CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = c_temp destination = g_path.

替换时是无法确定用户的文件夹层级有多少的,所以就需要按照 ‘\’ 切割,获取最后一行的数据,即文件名.XLS,再替换即可。

缺点

不知道是哪里没有清空或者释放,在文件下载到一定数量时,会使电脑卡顿,再到一定数量时开始黑屏卡死。 建议



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3